home *** CD-ROM | disk | FTP | other *** search
/ Micro Cookbook / Micro Cookbook (Pinpoint Publishing).iso / mcbwin.ms_ / mcbwin.ms
Text File  |  1994-06-06  |  11KB  |  371 lines

  1. '*********************************************************************
  2. '*             Micro Cookbook Installation Script
  3. '*            Designed for use with Microsoft Setup
  4. '*
  5. '*    (c) 1993, 1994 Pinpoint Publishing. All Rights Reserved
  6. '*********************************************************************
  7.  
  8. '$DEFINE DEBUG  ''Define for script development/debugging
  9.  
  10. '$INCLUDE 'setupapi.inc'
  11. '$INCLUDE 'msdetect.inc'
  12.  
  13. ''Dialog ID's
  14. CONST IDS_NOTEXTEDITOR = 1
  15. CONST WELCOME       = 100
  16. CONST ASKQUIT       = 200
  17. CONST DESTPATH      = 300
  18. CONST EXITFAILURE   = 400
  19. CONST EXITQUIT      = 600
  20. CONST EXITSUCCESS   = 700
  21. CONST APPHELP       = 900
  22. CONST NOFREESPACE    = 6300
  23. CONST BADPATH       = 6400
  24. CONST MCB_DETECTED    = 108
  25. CONST MCB_HELP        = 109
  26. CONST STANDBY        = 110
  27. CONST STD_MODE        = 133
  28. CONST SW_SHOWMAXIMIZED    = 3
  29.  
  30. ''Bitmap ID
  31. CONST LOGO = 1
  32.  
  33. ''Function constants
  34. CONST FULLSPACE    =    7000000
  35. CONST UPDATESPACE    = 2000000
  36.  
  37. GLOBAL DEST$        ''Default destination directory.
  38. GLOBAL OPTCUR$      ''Option selection from option dialog.
  39. GLOBAL VER_DATE$
  40. GLOBAL MDLSSDLG$    ''Modeless dialog procedure name.
  41. GLOBAL LHD$            ''Local Hard Disk Value list
  42. GLOBAL SRCHFILE$
  43. GLOBAL VERFILE$
  44. GLOBAL CUIDLL$
  45. GLOBAL INSTMODE$
  46. GLOBAL MCBPRESENT%
  47.  
  48. DECLARE SUB Install
  49. DECLARE SUB DeleteCDXFiles
  50. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  51. DECLARE FUNCTION LoadResString(UserDLL$, Resource%) AS STRING
  52. declare function LoadLibrary       lib "Kernel" (lpstr$) as integer
  53. declare sub      FreeLibrary       lib "Kernel" (hinstance%)
  54. declare function LoadString         lib "User"   (hinstance%, uint%, lpstr$, i%) as integer
  55.  
  56. INIT:
  57.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  58.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  59.     MDLSSDLG$ = "FModelessDlgProc"    ''Modeless dialog box procedure
  60.     SRCHFILE$ =    "CB40.DAT"
  61.     INSTMODE$ = "FULL"
  62.     MCBPRESENT% = FALSE
  63.     i%=ShowWindow(HWndFrame(), SW_SHOWMAXIMIZED)
  64.     SetBitmap CUIDLL$, LOGO
  65.  
  66.     IF i%=0 THEN
  67.     GOTO QUIT
  68.     END IF
  69.  
  70.     SetTitle "Micro Cookbook 4.0 for Windows"
  71.  
  72.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  73.     IF szInf$ = "" THEN
  74.         szInf$ = GetSymbolValue("STF_CWDDIR") + "MCBWIN.INF"
  75.     END IF
  76.     ReadInfFile szInf$
  77.  
  78. INSUFFPROC:
  79.     IF GetProcessorType() < 3 THEN
  80.         i% = DoMsgBox("The Micro Cookbook requires a 386 or higher processor to operate.","Setup Error!",MB_TASKMODAL+MB_ICONHAND+MB_OK)
  81.         GOTO QUIT
  82.     END IF
  83.  
  84. INSUFFWINVER:    '' Check for sufficient revision of Windows.
  85.     IF GetWindowsMajorVersion() < 3 AND GetWindowsMinorVersion() < 1 THEN
  86.             i% = DoMsgBox("The Micro Cookbook requires Windows 3.1 or later to operate.","Setup Error!",MB_TASKMODAL+MB_ICONHAND+MB_OK)
  87.             GOTO QUIT
  88.     END IF
  89.  
  90. STDMODE:
  91.     IF GetWindowsMode() < 2 THEN
  92.         sz$ = UIStartDlg(CUIDLL$, STD_MODE, "FInfoDlgProc", 0, "")
  93.         UIPop 1
  94.     END IF
  95.  
  96. NOMOUSE:    '' Check for presence of mouse (not required, but recommended)
  97.     IF HasMouseInstalled() = 0 THEN
  98.         i% = DoMsgBox("Setup did not detect the presence of a mouse. Although it is not required, a mouse is recommended for using The Micro Cookbook.","Setup Warning",MB_TASKMODAL+MB_ICONINFORMATION+MB_OK)
  99.     END IF
  100.  
  101. OPTCUR$ = "1"
  102.  
  103. '$IFDEF DEBUG
  104.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  105.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  106.     IF IsDriveValid(WinDrive$) = 0 THEN
  107.         i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  108.         GOTO QUIT
  109.     END IF
  110. '$ENDIF ''DEBUG
  111.  
  112.  
  113. WELCOME:
  114.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  115.     IF sz$ = "CONTINUE" THEN
  116.         UIPop 1
  117.     ELSE
  118.         GOSUB ASKQUIT
  119.         GOTO WELCOME
  120.     END IF
  121.  
  122. GETPATH:
  123.     DEST$="C:\COOK4"
  124.     SetSymbolValue "EditTextIn", DEST$
  125.     SetSymbolValue "EditFocus", "END"
  126. GETPATHL1:
  127.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  128.     DEST$ = GetSymbolValue("EditTextOut")
  129.     UIPop 1
  130.  
  131.     IF sz$ = "CONTINUE" THEN
  132.         IF IsDirWritable(DEST$) = 0 THEN
  133.             GOSUB BADPATH
  134.             GOTO GETPATHL1
  135.         END IF
  136.     ELSEIF sz$ = "REACTIVATE" THEN
  137.         GOTO WELCOME
  138.     ELSE
  139.         GOSUB ASKQUIT
  140.         GOTO GETPATH
  141.     END IF
  142.  
  143. OVERWRITE:
  144.     sz$ = FindFileInTree(SRCHFILE$, DEST$)
  145.     if sz$<>"" then
  146.         MCBPRESENT = TRUE
  147.         sz$=UIStartDlg(CUIDLL$, MCB_DETECTED,"FInfoDlgProc",MCB_HELP, HELPPROC$)
  148.         UIPop 1
  149.         if sz$="CONTINUE" then
  150.             INSTMODE$="UPDATE"
  151.             GOTO GETSPACE
  152.         END IF
  153.         IF sz$="EXIT" THEN
  154.             INSTMODE$="FULL"
  155.             GOTO GETSPACE
  156.         END IF
  157.         IF sz$="BACK" THEN
  158.             GOTO GETPATH
  159.         END IF
  160.     end if
  161.  
  162. GETSPACE:
  163.     SetSymbolValue "EditTextIn", DEST$    '' Change the default path back to install path
  164.     SetSymbolValue "EditFocus", "END"
  165.     DestDrive$=MID$(DEST$,1,1)
  166.  
  167.     i%=IsDriveValid(DestDrive$)        '' Check for valid drive, first off
  168.     IF i%=0 THEN
  169.         GOSUB BADPATH
  170.         GOTO GETPATHL1
  171.     END IF    '' Already checked for a valid drive to install update files.
  172.  
  173.     j& = GetFreeSpaceForDrive(DestDrive$)            '' Check for the amount of free
  174.  
  175.     IF j&=0 THEN                                    '' space. If 0, drive isn't valid
  176.         GOSUB BADPATH
  177.         GOTO GETPATHL1
  178.     END IF
  179.  
  180.     IF INSTMODE$ = "UPDATE" THEN
  181.         SpaceReq& = UPDATESPACE
  182.     ELSE
  183.         SpaceReq& = FULLSPACE
  184.     END IF
  185.  
  186.     IF j& < SpaceReq& THEN            '' Handle insufficient space on selected drive.
  187.         sz$ = UIStartDlg(CUIDLL$, NOFREESPACE,"FEditDlgProc", APPHELP, HELPPROC$)
  188.         UIPop 1
  189.         GOTO GETPATHL1
  190.     END IF
  191.  
  192. GOTSPACE:
  193.  
  194.     Install
  195.  
  196.  
  197. QUIT:
  198.     ON ERROR GOTO ERRQUIT
  199.  
  200.     IF ERR = 0 THEN
  201.         dlg% = EXITSUCCESS
  202.     ELSEIF ERR = STFQUIT THEN
  203.         dlg% = EXITQUIT
  204.     ELSE
  205.         dlg% = EXITFAILURE
  206.     END IF
  207. QUITL1:
  208.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  209.     IF sz$ = "REACTIVATE" THEN
  210.         GOTO QUITL1
  211.     END IF
  212.     UIPop 1
  213.  
  214.     END
  215.  
  216. ERRQUIT:
  217.     i% = DoMsgBox("Setup sources were corrupted, call (707) 523-0400!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  218.     END
  219.  
  220.  
  221.  
  222. BADPATH:
  223.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  224.     IF sz$ = "REACTIVATE" THEN
  225.         GOTO BADPATH
  226.     END IF
  227.     UIPop 1
  228.     RETURN
  229.  
  230.  
  231.  
  232. ASKQUIT:
  233.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  234.  
  235.     IF sz$ = "EXIT" THEN
  236.         UIPopAll
  237.         ERROR STFQUIT
  238.     ELSEIF sz$ = "REACTIVATE" THEN
  239.         GOTO ASKQUIT
  240.     ELSE
  241.         UIPop 1
  242.     END IF
  243.     RETURN
  244.  
  245.  
  246.  
  247. '**
  248. '** Purpose:
  249. '**     Builds the copy list and performs all installation operations.
  250. '** Arguments:
  251. '**     none.
  252. '** Returns:
  253. '**     none.
  254. '*************************************************************************
  255. SUB Install STATIC
  256.  
  257.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  258.     CreateDir DEST$, cmoNone
  259.  
  260.     IF INSTMODE$="FULL" THEN
  261.         AddSectionFilesToCopyList "Root", SrcDir$, DEST$
  262.     END IF
  263.  
  264.     IF MCBPRESENT = TRUE THEN
  265.         DeleteCDXFiles
  266.     END IF
  267.  
  268.     AddSectionFilesToCopyList "Updates",SrcDir$, DEST$
  269.  
  270.     CopyFilesInCopyList
  271.  
  272.     TxtView$ = GetIniKeyString("WIN.INI","Extensions","txt")
  273.     if TxtView$<>"" then
  274.         i% = InStr(TxtView$," ")
  275.         if i% > 0 then
  276.             TxtView$ = mid$(TxtView$, 1, i%)
  277.             TxtView$ = TxtView$ + MakePath(DEST$,"readme.txt")
  278.         end if
  279.     end if
  280.  
  281.     HlpView$=GetIniKeyString("WIN.INI", "Extensions", "hlp")
  282.     if HlpView$<>"" then
  283.         i%=InStr(HlpView$," ")
  284.         if i%>0 then
  285.             HlpView$ = mid$(HlpView$, 1, i%)
  286.             HlpView$ = HlpView$ + MakePath(DEST$,"cb40.hlp")
  287.         end if
  288.     end if
  289.  
  290.     CreateProgmanGroup "Micro Cookbook 4.0", "", cmoNone
  291.     ShowProgmanGroup  "Micro Cookbook 4.0", 1, cmoNone
  292.     CreateProgmanItem "Micro Cookbook 4.0", "Micro Cookbook", MakePath(DEST$,"cookbook.exe"), "", cmoOverwrite
  293.     if TxtView$ <> "" then
  294.         CreateProgmanItem "Micro Cookbook 4.0", "Micro Cookbook Read Me", TxtView$, "", cmoOverwrite
  295.     end if
  296.  
  297.     if HlpView$ <> "" then
  298.         CreateProgmanItem "Micro Cookbook 4.0", "Micro Cookbook Help", HlpView$, "", cmoOverwrite
  299.     end if
  300.  
  301.     if TxtView$ <> "" then
  302.         Run TxtView$
  303.     else
  304.         if HlpView$ <> "" then
  305.             Run HlpView$
  306.         end if
  307.     else
  308.         rz$ = LoadResString(CUIDLL$, IDS_NOTEXTEDITOR)
  309.         i% = DoMsgBox(rz$, "Setup Error", IDOK)
  310.     end if
  311. END SUB
  312.  
  313. '*************************************************************************
  314. '** Purpose:
  315. '**     Appends a file name to the end of a directory path,
  316. '**     inserting a backslash character as needed.
  317. '** Arguments:
  318. '**     szDir$  - full directory path (with optional ending "\")
  319. '**     szFile$ - filename to append to directory
  320. '** Returns:
  321. '**     Resulting fully qualified path name.
  322. '*************************************************************************
  323.  
  324. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  325.     IF szDir$ = "" THEN
  326.         MakePath = szFile$
  327.     ELSEIF szFile$ = "" THEN
  328.         MakePath = szDir$
  329.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  330.         MakePath = szDir$ + szFile$
  331.     ELSE
  332.         MakePath = szDir$ + "\" + szFile$
  333.     END IF
  334. END FUNCTION
  335.  
  336. '***********************************************************************************
  337. '** Purpose:
  338. '**        Loads resource string from user's DLL to be used in an informational dialog
  339. '**    Arguments:
  340. '**        UserDLL$ - name of the user library to be used
  341. '**        Resource% - Resource ID number of the string to load
  342. '** Returns:
  343. '**        String associated with Resource ID, null string if not found.
  344. '***********************************************************************************
  345.  
  346. FUNCTION LoadResString(UserDLL$, Resource%) STATIC AS STRING
  347.     UserLib$=UserDLL$            ' Need to do this, as UserDLL$ is passed by reference and gets
  348.     i% = LoadLibrary(UserLib$)    ' thrashed by the call to LoadString.
  349.     r% = LoadString(i%, Resource%, result$, 256)
  350.     FreeLibrary(i%)
  351.     LoadResString$ = result$
  352.     if r% = 0 then
  353.         return
  354.     end if
  355. END FUNCTION
  356.  
  357. SUB DeleteCDXFiles STATIC
  358.     RemoveFile MakePath(DEST$,"CB4001.CDX"), cmoNone
  359.     RemoveFile MakePath(DEST$,"CB4002.CDX"), cmoNone
  360.     RemoveFile MakePath(DEST$,"CB4003.CDX"), cmoNone
  361.     RemoveFile MakePath(DEST$,"CB4004.CDX"), cmoNone
  362.     RemoveFile MakePath(DEST$,"CB4005.CDX"), cmoNone
  363.     RemoveFile MakePath(DEST$,"CB4006.CDX"), cmoNone
  364.     RemoveFile MakePath(DEST$,"CB4007.CDX"), cmoNone
  365.     RemoveFile MakePath(DEST$,"CB4008.CDX"), cmoNone
  366.     RemoveFile MakePath(DEST$,"CB4009.CDX"), cmoNone
  367.     RemoveFile MakePath(DEST$,"CB4010.CDX"), cmoNone
  368.     RemoveFile MakePath(DEST$,"CB4011.CDX"), cmoNone
  369.     RemoveFile MakePath(DEST$,"CB4002.IA"), cmoNone
  370.     RemoveFile MakePath(DEST$,"CB4006.IA"), cmoNone
  371. END SUB